package schema

import (
	"errors"
	"strings"
)

// Dictionary 字典管理
type Dictionary struct {
	ID        int64  `json:"id" bson:"_id" structs:"id"`                        // 唯一标识(自增ID)
	RecordID  string `json:"record_id" bson:"record_id" structs:"record_id"`    // 记录内码(uuid)
	Code      string `json:"code" bson:"code" structs:"code"`                   // 字典编号
	Name      string `json:"name" bson:"name" structs:"name"`                   // 字典名称
	Memo      string `json:"memo" bson:"memo" structs:"memo"`                   // 备注
	Sequence  int    `json:"sequence" bson:"sequence" structs:"sequence"`       // 排序值
	LevelCode string `json:"level_code" bson:"level_code" structs:"level_code"` // 分级码
	ParentID  string `json:"parent_id" bson:"parent_id" structs:"parent_id"`    // 父级内码
	Creator   string `json:"creator" bson:"creator" structs:"creator"`          // 创建人
	Created   int64  `json:"created" bson:"created" structs:"created"`          // 创建时间戳
	Deleted   int64  `json:"deleted" bson:"deleted" structs:"deleted"`          // 删除时间戳
}

// Validate 验证参数
func (a *Dictionary) Validate() error {
	if a.Code == "" || a.Name == "" {
		return errors.New("无效的请求参数")
	}
	if strings.Contains(a.Code, "$#") {
		return errors.New("非法字符")
	}
	return nil
}

// DictionaryQueryParam 字典表查询参数
type DictionaryQueryParam struct {
	Name     string // 名称
	Code     string //字典编码
	ParentID string // 父级内码
}

// DictionarySelectParam 字典表选择数据查询参数
type DictionarySelectParam struct {
	Search   string //搜索
	Name     string // 名称
	Sequence int    //序号
	ParentID string //父级内码
}

// DictionarySelect 字典表选择数据
type DictionarySelect struct {
	RecordID  string `json:"record_id" bson:"record_id" structs:"record_id"`    // 记录内码(uuid)
	Name      string `json:"name" bson:"name" structs:"name"`                   // 名称
	Code      string `json:"code" bson:"code" structs:"code"`                   // 字典编号
	ParentID  string `json:"parent_id" bson:"parent_id" structs:"parent_id"`    // 父级内码
	LevelCode string `json:"level_code" bson:"level_code" structs:"level_code"` // 分级码
	Sequence  int    `json:"sequence" bson:"sequence" structs:"sequence"`       // 排序值
}

// DictionaryShow 字典展示数据
type DictionaryShow struct {
	RecordID string `json:"record_id" structs:"record_id"` // 记录内码(uuid)
	Name     string `json:"name"  structs:"name"`          // 名称
	Code     string `json:"code"  structs:"code"`          // 字典编号
	ParentID string `json:"parent_id" structs:"parent_id"` // 父级内码
}
